In a data processor, breakpoints are typically used to debug software errors in computers. A breakpoint is literally a point in a software program where a break in the program is taken and data in memory is read to ascertain the status of the program at that point. From this information, a programmer may determine what is happening in the program at selected points. Initially, breakpoints were realized in processing systems utilizing card reading machines by physically inserting a card which was recognized as an illegal instruction at a predetermined location in the program and causing the program to be terminated and the memory contents written. If multiple breakpoints were desired, the illegal instruction card was moved by the programmer to another breakpoint and the program run again. Later generations of processors expanded the breakpoint function by using multiple breakpoint instructions which would signal an interrupt status but would not terminate the program as other illegal instructions would. This gave a programmer the ability to perform multiple breakpoints in a single run of the program. However, the ability to selectively execute breakpoints in a program having repetitive subroutines was needed. The capability of selectively using breakpoint instructions was not easily executed in this generation because software was required to control the exact location of breakpoints in programs having multiple repetitive sections. Further, every time a breakpoint instruction was received, an exception was forced to occur regardless of whether the breakpoint was desired or not. The overhead involved with implementing breakpoints by software was large because of the time required for exception handling.
Another generation of processors provided the ability to selectively use breakpoints by utilizing external hardware. When multiple breakpoints were used, the associated hardware increased proportionately. The determination of where breakpoints were taken in a software program was made by closely monitoring the external bus activity and the instructions being executed by the processor. A determination of whether or not to take the breakpoint was made by the external hardware which monitors the number of times a memory location is accessed. After a predetermined number of accesses, the breakpoint is forced to occur. However, the presence of an on-board instruction cache in a data processor prevents proper monitoring since no external bus activity may occur.